import {
  Controller,
  Get,
  Req,
  Body,
  Put,
  Param,
  Delete,
  UseGuards,
  Query,
} from '@nestjs/common';
import { ManagerService } from './manager.service';
import { UpdateManagerDto } from './dto/update-manager.dto';
import { AdminAuthGuard } from 'src/module/utils/admin-auth.guard';
import { PatchManagerDto } from './dto/patch-manager.dto';
import {
  ApiTags,
  ApiParam,
  ApiOperation,
  ApiBearerAuth,
  ApiQuery,
} from '@nestjs/swagger';

@Controller('manager')
@ApiTags('后台管理员')
@ApiBearerAuth()
export class ManagerController {
  constructor(private readonly managerService: ManagerService) {}

  @Get()
  @UseGuards(AdminAuthGuard)
  @ApiOperation({
    summary: '获取管理员列表(role:0)',
    description:
      '需要身份认证，只有超级管理员可以获取管理员列表，只能获取到和超级管理员同一地区的其他管理员列表',
  })
  findAll(@Req() request) {
    const managerInfo = request.managerInfo;
    return this.managerService.findAll(managerInfo);
  }

  // 通过tonken值获取当前用户的信息
  @ApiOperation({
    description: '通过token获取当前用户信息',
    summary: '通过token获取当前用户信息',
  })
  @Get('/byToken')
  byToken(@Req() request) {
    return this.managerService.findOne(parseInt(request.managerInfo.sub));
  }

  // 分页查询管理员数据
  @Get('/skip')
  @ApiOperation({
    summary: '分页查询',
    description: '分页查询管理员信息',
  })
  @ApiQuery({ name: 'pageSize', description: '数据条数', required: true })
  @ApiQuery({ name: 'currentPage', description: '当前页码', required: true })
  @ApiQuery({ name: 'role', description: '角色', required: true })
  @ApiQuery({ name: 'city', description: '城市', required: true })
  @ApiQuery({ name: 'keywords', description: '关键词', required: false })
  skipFind(
    @Query('currentPage') currentPage,
    @Query('pageSize') pageSize,
    @Query('role') role,
    @Query('city') city,
    @Query('keywords') keywords,
  ) {
    return this.managerService.skipFind(
      +currentPage,
      +pageSize,
      role,
      city,
      keywords,
    );
  }

  @Get(':id')
  @ApiOperation({
    summary: '根据id获取管理员信息（managerInfo)',
    description: '通过token值中的id，查询管理员的信息',
  })
  @ApiParam({ name: 'id', description: '根据id查询', required: true })
  findOne(@Param('id') id: string) {
    return this.managerService.findOne(+id);
  }

  @Put('/superUpdate')
  @UseGuards(AdminAuthGuard)
  @ApiOperation({
    summary: '超级管理员修改信息',
    description:
      '超级管理员修改其他管理员的信息,用于修改其他的管理员，所用的id是其他管理员的id',
  })
  patch(@Body() patchManagerInfo: PatchManagerDto) {
    return this.managerService.patch(patchManagerInfo);
  }

  @Put()
  @ApiOperation({
    summary: '根据id修改管理员数据',
    description: '所有管理员都可以修改自己的数据，只能对一部分信息的修改',
  })
  update(@Body() updateManagerDto: UpdateManagerDto) {
    return this.managerService.update(updateManagerDto);
  }

  @Delete('/delete')
  @UseGuards(AdminAuthGuard)
  @ApiOperation({
    summary: '根据id删除管理员(role:0)',
    description: '删除管理员，一般是超级管理才能做该操作',
  })
  remove(@Body() ids: number[]) {
    return this.managerService.remove(ids);
  }

  @Put('/update_password/:id')
  updatePassword(@Param('id') id, @Body() updatePassword) {
    return this.managerService.updatePassword(id, updatePassword.password);
  }
}
